#include <vector>
#include <fstream>
#include <iostream>

using namespace std;

// 想办法表达点的概念
struct Point {
  int x;
  int y;
};

// 想办法表达矩形的概念
struct Rect {
  // 属性
  Point bl; // bottom left
  Point tr; // top right

  // 方法
  int area() {
    return (tr.x - bl.x) * (tr.y - bl.y);
  }

  // pt 这个点是否包含在由 bl 和 tr 所构成的矩形里
  bool covered(Point pt) {
    return pt.x >= bl.x && pt.x <= tr.x && pt.y >= bl.y && pt.y <= tr.y;
  }
};

int main(int argc, char const *argv[])
{
  /* code */
  // 处理程序输入
  ifstream ifs("BlockedBillboard.in");
  // 当我们定义局部变量的时候，一定养成对他们初始化的好习惯
  int x1 = 0, y1 = 0, x2 = 0, y2 = 0;

  ifs >> x1 >> y1 >> x2 >> y2;

  // 除草机广告牌的左下和右上
  Point pt1 {x1, y1}; // 左下
  Point pt2 {x2, y2}; // 右上
  Point pt5 {x1, y2}; // 左上
  Point pt6 {x2, y1}; // 右下
  Rect lawnmower {pt1, pt2};

  ifs >> x1 >> y1 >> x2 >> y2;
  // 牛饲料广告牌的左下和右上
  Point pt3 {x1, y1};
  Point pt4 {x2, y2};
  Rect food {pt3, pt4};

  int cornersCovered = 0;

  if (food.covered(pt1)) {
    ++cornersCovered;
  }

  if (food.covered(pt2)) {
    ++cornersCovered;
  }

  if (food.covered(pt5)) {
    ++cornersCovered;
  }

  if (food.covered(pt6)) {
    ++cornersCovered;
  }

  int area = 0;

  if (cornersCovered == 1) {
    area = lawnmower.area();
  }
  else if (cornersCovered == 4) {
    area = 0;
  }
  else {
    // 
    // Rect covered {重合的左下位置，重合的↗️}
    // area = lawnmower.area() - covered.area();
  }

  // 把 area 输出到文件
  return 0;
}

